#include<iostream>
#include<mysql/mysql.h>
#include<string>
using namespace std;

const string host="127.0.0.1";
const string user="client";
const string passwd="12345678";
const string db="conn";
unsigned int port=3306;


int main()
{
    MYSQL* my=mysql_init(nullptr);//mysql初始化
    if(my==nullptr)
    {
        cerr<<"init MySQL error"<<endl;
        return -1;
    }

    if(mysql_real_connect(my,host.c_str(),user.c_str(),passwd.c_str(),db.c_str(),port,nullptr,0)==nullptr)//mysql连接
    {
        cerr<<"connect MySQL error"<<endl;
        cerr<<"error:"<<mysql_error(my)<<endl;
        return 2;
    }
    cout<<"connect MySQL success"<<endl;
    mysql_set_character_set(my, "utf8");//设置连接字符集为utf-8
   
   
    string sql="select * from user";
    int n=mysql_query(my,sql.c_str());//执行sql语句
    if(n==0)cout<<sql<<"    success"<<endl;
    else
    {
        cerr<<sql<<"    failed"<<endl;
        return 3;
    }

    MYSQL_RES* res=mysql_store_result(my);//获取结果集
    if(res==nullptr)
    {
        cerr<<"mysql_store_result error: "<<mysql_error(my)<<endl;
        return 4;
    }

    my_ulonglong rows=mysql_num_rows(res);//获取结果行数
    my_ulonglong fields=mysql_num_fields(res);//获取结果列数
    
    cout<<"行："<<rows<<"列："<<fields<<endl;
    //属性
    MYSQL_FIELD* field=mysql_fetch_fields(res);//获取结果字段属性
    for(my_ulonglong i=0;i<fields;i++)
    {
        cout<<field[i].name<<"\t";
    }
    cout<<endl;
    //内容
    for(my_ulonglong i=0;i<rows;i++)
    {
        MYSQL_ROW row=mysql_fetch_row(res);//获取结果行,mysql_fetch_row获取一行后，会自动跳到下一行，和迭代器差不多
        for(my_ulonglong j=0;j<fields;j++)
        {
            cout<<row[j]<<"\t";
        }
        cout<<endl;
    }
    




    // while(true){
    //     cout<<"MySQL>>> ";
    //     if(!getline(cin,sql)||sql=="quit")
    //     {
    //         cout<<"Bye Bye"<<endl;
    //         break;
    //     }
    //     int n=mysql_query(my,sql.c_str());
    //     if(n==0)
    //     {
    //         cout<<sql<<" success: "<<n<<endl;
            
    //         MYSQL_RES* res=mysql_store_result(my);
    //         if(res==nullptr)
    //         {
    //             cout<<"store result error: "<<mysql_error(my)<<endl;
    //             continue;
    //         }
            
    //     }
    //     else
    //     {
    //         cout<<sql<<" error: "<<n<<endl;
    //     }
    // }
   
    mysql_free_result(res);
    mysql_close(my);
    return 0;
}
